package com.wpw.dream.annotation.action;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.wpw.dream.base.BaseAction;

@Controller
@RequestMapping("/annotation")
public class AnnotationAction extends BaseAction {

	// (2)含某变量的一类值。@PathVariable注解即提取路径中的变量值。
	@RequestMapping(value = "/pathVariable/{str}")
	public ModelAndView pathVariable(@PathVariable String str) {
		ModelAndView mv = new ModelAndView();
		mv.addObject("str", str);
		mv.setViewName("annotation/index");
		return mv;
	}

	// (3)ant风格
	// @RequestMapping(value="/get/id?")：可匹配“/get/id1”或“/get/ida”，但不匹配“/get/id”或“/get/idaa”;
	// @RequestMapping(value="/get/id*")：可匹配“/get/idabc”或“/get/id”，但不匹配“/get/idabc/abc”;
	// @RequestMapping(value="/get/id/*")：可匹配“/get/id/abc”，但不匹配“/get/idabc”;
	// @RequestMapping(value="/get/id/**/{id}")：可匹配“/get/id/abc/abc/123”或“/get/id/123”，也就是Ant风格和URI模板变量风格可混用。
	@RequestMapping(value = "/aut/id?")
	public ModelAndView ant() {
		ModelAndView mv = new ModelAndView();
		mv.addObject("str", "aut");
		mv.setViewName("annotation/index");
		return mv;
	}

	// (4)含正则表达式的一类值
	// @RequestMapping(value="/get/{idPre:\\d+}-{idNum:\\d+}")：可以匹配“/get/123-1”，但不能匹配“/get/abc-1”，这样可以设计更加严格的规则。
	// 可以通过@PathVariable 注解提取路径中的变量(idPre,idNum)
	@RequestMapping(value = "/reg/{plus1:\\d+}+{plus2:\\d+}")
	public ModelAndView reg(@PathVariable Long plus1, @PathVariable Long plus2) {
		ModelAndView mv = new ModelAndView();
		mv.addObject("str", plus1 + plus2);
		mv.setViewName("annotation/index");
		return mv;
	}

	// (5)或关系
	// @RequestMapping(value={"/get","/fetch"} )即 /get或/fetch都会映射到该方法上。
	@RequestMapping(value = { "/get", "/fetch" })
	public ModelAndView or() {
		ModelAndView mv = new ModelAndView();
		mv.addObject("str", "or");
		mv.setViewName("annotation/index");
		return mv;
	}
	
//	method：指定请求的method类型， GET、POST、PUT、DELETE等；
//	@RequestMapping(value="/get/{bookid}",method={RequestMethod.GET,RequestMethod.POST})
//
//	params：指定request中必须包含某些参数值是，才让该方法处理。
//	@RequestMapping(params="action=del")，请求参数包含“action=del”,如：http://localhost:8080/book?action=del
	@RequestMapping(value = "/params/{str}", method = RequestMethod.GET, params="action=del")
	public ModelAndView params(@PathVariable String str) {
		ModelAndView mv = new ModelAndView();
		mv.addObject("str", "params:del");
		mv.setViewName("annotation/index");
		return mv;
	}
	
	@RequestMapping(value = "/params/{str}", method = RequestMethod.GET, params="action=get")
	public ModelAndView params2(@PathVariable String str) {
		ModelAndView mv = new ModelAndView();
		mv.addObject("str", "params:get");
		mv.setViewName("annotation/index");
		
		return mv;
	}
//	headers：指定request中必须包含某些指定的header值，才能让该方法处理请求。
//	@RequestMapping(value="/header/id", headers = "Accept=application/json")：表示请求的URL必须为“/header/id 且请求头中必须有“Accept =application/json”参数即可匹配。
	
//	consumes：指定处理请求的提交内容类型（Content-Type），例如application/json, text/html。
	
//	produces: 指定返回的内容类型，仅当request请求头中的(Accept)类型中包含该指定类型才返回。 
	
	
	
	
	
}
